package com.leps.nq.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.leps.nq.common.exception.NqFileUploadException;
import com.leps.nq.common.vo.PageVo;
import com.leps.nq.sys.entity.SysRole;
import com.leps.nq.sys.entity.SysUser;
import com.leps.nq.sys.vo.*;

import java.util.List;

/**
 * <p>
 * 用户信息表 服务类
 * </p>
 *
 * @author hex
 * @since 2022-05-20
 */
public interface ISysUserService extends IService<SysUser> {
    /**
     * 根据条件分页查询用户列表
     *
     * @param userQueryModel 查询参数模型
     * @return 用户信息集合信息
     */
    PageVo<SysUser> selectUserListPage(UserQueryModel userQueryModel);

    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    SysUser selectUserByUserName(String userName);

    List<SysRole> selectRolesByUserId(Long userId);

    List<MenuInfoVo> selectMenusByUserId(Long userId);

    List<String> selectPermsByUserId(Long userId);

    boolean changeStatus(Long userId, String status);

    boolean grantRoles(Long userId, Long[] roleIds);

    boolean resetPwd(Long userId);

    boolean updateUser(SysUser user);

    boolean changePwdBySelf(String oldPwd, String newPwd);

    boolean createUser(CreateUserVo createUserVo) throws NqFileUploadException;

    UserInfoVo selectDetailsById(Long userId);

    void updateLoginInfo();

    /**
     * 分配角色的同时分配客户、区块、平台等数据权限
     * @param vo
     * @return
     */
    boolean grantRoles2(GrantRoles2Vo vo);
}
